<#-- 一、字符串函数 -->
<#-- 
substring ：   截取字符串
cap_first ：   整行文本的第一个字母转成大写 
uncap_first：  正行文本的第一个字母转成小写
capitalize：   每个单词的首字母大写
ends_with：    是否已某个字符串结束，返回bool
starts_with：  是否已某个字符串开始，返回bool
index_of：     某个串在字符串中第一次出现的位置
last_index_of：某个串在字符串中最后一次出现的位置
length：       字符串长度
left_pad：     左补齐，默认使用空格补齐，可以自己指定，如果超过需要的长度，直接返回字符串
right_pad：    右补齐，默认使用空格补齐，可以自己指定，如果超过需要的长度，直接返回字符串
contains：     是否包含某个字符串
replace：      把某个字符串替换成另外一个字符串
split：        把字符串分割成一个数组
trim：         去掉字符串首尾空格
word_list：    可以任意多的空格截取
  -->
${"abcde"?substring(1)}
${"abcde"?substring(2,4)}
${"hello world"?cap_first}
${"Hello World"?uncap_first}
${"hello world"?capitalize}
${"hello world"?ends_with("ld2")?c}
${"hello world"?starts_with("hel")?c}
${"hello world"?index_of("l")}
${"hello world"?last_index_of("l")}
${"hello world"?length}
${"hello"?left_pad(10)}
${"hello"?left_pad(10,"lx")}<#-- 指定字符串，可以是多个字符 -->
${"hello"?right_pad(10,"*")}
${"hello"?contains("l")?c}
${"hello world"?replace("l","L")}
<#list "hellomygod,doit"?split("o") as w>
${w}
</#list>
|${"    test  "?trim}|
<#list "hello    world   hi "?word_list as wi>
${wi}
</#list>
<#-- 二、数字函数 -->
<#-- 
c      : 把数字转换成字符串
string : 把数字转化成字符串，比上面的更加灵活
round  : 四舍五入
floor  : 向下取整
ceiling: 向上取整
  -->
 <#-- 
 <#setting locale="hu">
  -->
 ${4.2}  ${4.2?c}<#-- 在匈牙利语下，前面的会输出4,2，后面的会输出4.2 -->
 ${4.2?string.percent}<#-- 使用%比形式显示 -->
 ${4.2?string.currency}<#-- 使用金额形式显示 -->
 ${4.7?round}
 ${4.7?floor}
 ${4.7?ceiling}

<#-- 三、日期函数 -->
<#-- 
注意下面的now是从外面传入的数据模型
string("yyyy-MM-dd")：这种形式格式化
date：获取年月日
time：获取时分秒
datetime：年月日时分秒
  -->
 ${now?string("yyyy-MM-dd HH:mm:ss")}
 ${now?date}
 ${now?time}
 ${now?datetime}
 
 <#-- 四、布尔函数 
 string：把bool转换成字符串
 -->
 ${true?string("yes","no")}
 
 <#-- 五、序列函数
 first：获取序列中第一个元素
 last：获取序列中最后一个元素
 seq_contains：是否包含某个元素
 seq_index_of：查找某个元素的位置
 seq_last_index_of：查找某个元素最后出现的位置，没有返回-1
 reverse:反转序列中的元素
 size:获取元素个数
 sort:排序
 sort_by:用于hash表的排序，可以指明根据那个字段排序
 chunk:把序列分成几个序列，可以指定填充元素
 -->
 <#assign seq=[9,8,5,4,6]>
 ${seq?first}
 ${seq?last}
 ${seq?seq_contains(4)?c}
 ${seq?seq_index_of(7)}
 <#list seq?reverse as n>${n},</#list>
 ${seq?size}
 <#list seq?sort as n>${n},</#list>
 <#assign users=[{"name":"Tom","age":34},{"name":"Jim","age":56},{"name":"Tim","age":25},{"name":"Lucy","age":29}]>
 <#list users?sort_by("age") as n>${n.name}:${n.age},</#list>
 <#list seq?chunk(2) as m> <#-- 没一个小序列中包含两个元素 -->
 	<#list m as mi>${mi},</#list>
 </#list>
 <#list seq?chunk(2,"x") as m><#-- 如果小序列个数不足2，使用"x"补 -->
 	<#list m as mi>${mi},</#list>
 </#list>
 
 <#-- 六、Hash函数 -->
 <#-- 
 keys:获取hash的所有key
 -->
 <#assign h={"name":"Tom","age":34}>
 <#list h?keys as k>
 ${k}:${h[k]}
 </#list>
 
 <#-- 七、自定义函数 -->
 <#-- 简单函数 -->
 <#function add num1 num2>
 	<#return num1+num2>
 </#function>
 ${add(3,4)}
 <#--可变参数的函数-->
 <#function addAll nums...>
 	<#local total=0>
 	<#list nums as n>
 		<#local total=total+n>
 	</#list>
 	<#return total>
 </#function>
 ${addAll(1,2,3,4,5)}
